package com.linktel.productionLine.dao;

import com.linktel.productionLine.entity.CommitUser;
import com.linktel.productionLine.entity.dto.commitUser.CommitUserDTO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author Linktel
 * @description 针对表【commit_user(提交人员)】的数据库操作Mapper
 * @Date 2023-08-30 12:32:32
 */
public interface CommitUserDao {

    /**
     * 用户登录
     *
     * @param username 用户名
     * @param password 密码
     * @return 用户信息
     */
    CommitUserDTO userLogin(@Param("username") String username, @Param("password") String password);

    /**
     * 根据用户id得到该用户信息
     *
     * @param commitUserId 用户id
     * @return 该用户信息
     */
    CommitUserDTO getById(@Param("commitUserId") Long commitUserId);

    /**
     * 查询所有用户
     *
     * @return 用户信息列表
     */
    List<CommitUserDTO> listCommitUser();

    /**
     * 添加用户
     *
     * @param name          用户姓名
     * @param username      用户名
     * @param password      密码
     * @param role          角色
     * @param currentUserId 当前登录用户id
     * @return 是否添加成功
     */
    Boolean addCommitUser(@Param("name") String name,
                          @Param("username") String username,
                          @Param("password") String password,
                          @Param("role") Integer role,
                          @Param("currentUserId") Long currentUserId);

    /**
     * 修改用户
     *
     * @param id            修改用户id
     * @param name          用户姓名
     * @param username      用户名
     * @param role          角色
     * @param currentUserId 当前登录用户id
     * @return 是否修改成功
     */
    Boolean editCommitUser(@Param("id") Long id,
                           @Param("name") String name,
                           @Param("username") String username,
                           @Param("role") Integer role,
                           @Param("currentUserId") Long currentUserId);

    /**
     * 删除用户
     *
     * @param id            删除用户id
     * @param currentUserId 当前登录用户id
     * @return 是否删除成功
     */
    Boolean deleteCommitUser(@Param("id") Long id, @Param("currentUserId") Long currentUserId);

    /**
     * 根据用户名查询用户信息
     *
     * @param username 用户名
     * @return 用户信息
     */
    List<CommitUser> getByUsername(@Param("username") String username);

    /**
     * 修改用户密码
     *
     * @param id            修改用户信息id
     * @param newPassword   新密码
     * @param currentUserId 当前登录用户id
     * @return 是否修改成功
     */
    Boolean editUserPassword(@Param("id") Long id, @Param("newPassword") String newPassword, @Param("currentUserId") Long currentUserId);
}
